<?php

class CrudDamianController extends Zend_Controller_Action
{

	public $cos='testwlasnosc';
	private $model;
	
	# dodanie tutuaj konstruktora nie jest takie proste bo wywala blad :)
	/*
	public function __construct()
	{
		parent::__construct(); //lepiej aby bylo choc mozliwe ze nie jest potrzebne
		$this->model = new Application_Model_DbTable_Osoba(); // standardowo nie ma tego w ksiazce ale sadze ze to dobra proktyka
	}
	*/
	
	
    public function init()
    {
        /* Initialize action controller here */
    	$this->model = new Application_Model_DbTable_Adres(); 
    }

    public function indexAction()
    {
    	#pobranie rekordow i w widoku wyswietlenie ich w formie tabelarycznej - narazie bez PAGINACJI
       $DbTable = new Application_Model_DbTable_Osoba();
       $this->view->objects=$DbTable->fetchAll();
       
       # Przyklad pracy z includowana dynamicznie moja klasa zewnetrzna znajdujaca sie w modelu
      // $test= new Application_Model_testowaOgolna(); //todo narzie nie dziala niewiem dlaczego
       //$this->view->test=$test->testowaFunckcja(); 
    }

    
    /**
     * akcja odpowiedzialna za wyswietlenie pustego formularza
     * Operacja crud - create sklada sie z 2 etapow (akcji)
     */
 	public function creatformAction()
    {
    	$this->view->form = new Application_Form_Imie();
    	$url= $this->view->url(array('action'=>'creat'));
    	$this->view->form->setAction($url);
    }

    /**
     * OPeracja CREATE 2 etap zapis do bazy
     * @throws Exception
     */
 	public function creatAction()
    {
        if ($this->getRequest()->isPost()) 
        {
           	$form = new Application_Form_Imie();
           	
           	# dostalem rzeczy z posta i zostaly zwalidowane - zapis do bazy i przekierowanie do index
            if ($form->isValid($this->getRequest()->getPost())) 
            {
                	$dane = $form->getValues();
                	$Osoba = new Application_Model_DbTable_Osoba();
                	# to zadziala pod warunkiem ze nazwy kluczy benda sie zgadzaly
                	$Osoba->insert($dane);
                	
                	return $this->_helper->redirector('index');
            }
            
            # dane nie przeszly walidacji wyswietl formularz
            $this->view->form = $form;
            $this->view->komunikat='fsd';
        } 
        else
        {
            throw new Exception('Błędny adres!', 404);
        }
    }
    
	public function deleteAction()
    {
    	# pobranie wiadomosci z posta fajne bo obiektowe
    	$id = $this->getRequest()->getUserParam('id');
    	
        $Osoba = new Application_Model_DbTable_Osoba();
        
        $obj = $Osoba->find($id)->current(); //abym mogł wywalic wiersz musze go najpierw pobrac
        if(!$obj)
        {
        	throw new Zend_Date_Exception('Błedny adres',404);
        }
        
        $obj->delete();
        return $this->_helper->redirector('index');
    }
    
    /**
     * Tworzenie formularza edycji (zawierajacy dane 1 rekordu)
     * @throws Zend_Controller_Action_Exception
     */
	public function editAction()
    {
        $id = $this->getRequest()->getParam('id');
        $obj = $this->model->find($id)->current();
        if (!$obj) 
        {
            throw new Zend_Controller_Action_Exception('Błędny adres!', 404);
        }
        $this->view->form = new Application_Form_Imie();
        
        #ciekaw bardzo miejsce !! wypełnienie formularza danymi pochodzacymi z bazy
        # populate bardzo wiele czasu zaoszczedza tylko np. co sie stanie jak bende chcial popupate multi select ?
       $form_imie= $this->view->form->populate($obj->toArray());

               Application_Model_Narzedziowe_CVarDumper::dodaj($form_imie->imie,'$form_imie');
               
               # nic nie daje choc powinno
               //$this->view->form->imie->value='sdf'; // proba ustawienia wartosci do forma ale nie dziala !!
               
        $url = $this->view->url(
            array(
                'action' => 'update',
                'id' => $id
            )
        );
        $this->view->form->setAction($url);
        $this->view->object = $obj; // przeslanie do widoku calego obiektu rekordu bazodanowego
    }
    
    # moja akcja bendaca kopja akcji edit tylko formularza nie wypelniam danymi pochodzacymi z posta tylko randomowymi
    # test wypelniania danych formularza, a potem generowania go. nie korzystam z metody populate.
    # @todo do zrobienia
    public function addrandomAction()
    {
        $this->view->form = new Application_Form_Imie();
     	# TODO pobieram element formularza imie. teraz chce mu ustawic wartosc ale nie wiem jak to zrobic
        # to do nie dzilaa  a powinno nie wiem dlaczego
        $imie=$this->view->form->imie;
     	
        Application_Model_Narzedziowe_CVarDumper::dodaj($imie,'form->imie');
     	
        $url = $this->view->url(
            array(
                'action' => 'update',
            )
        );
        //$this->view->form->setAction($url);
       // $this->view->object = $obj;
       echo 'dziala';
    }
    
    
	public function updateAction()
    {
        $id = $this->getRequest()->getParam('id');
        
        $Osoba = new Application_Model_DbTable_Osoba();
        
        $obj = $Osoba->find($id)->current(); //abym mogł wywalic wiersz musze go najpierw pobrac
        if(!$obj)
        {
        	throw new Zend_Date_Exception('Błedny adres',404);
        }
        
        if( $this->getRequest()->isPost())
        {
        	$form = new Application_Form_Imie();
        	
        	if( $form->isValid($this->getRequest()->getPost())) //z tego wynika ze przy walidacji przypisuje elementy do forma
        	{
        		//jak bym tak nie umial ot mozna by jechac z palca $date[]=$_Post['imie'],...
        		# zajebiste miejsce potega Zemda crud wychodzi.
        		# normalnie w metodzie musia bym to pisac z palca zapytanie i dane jakie wklejam a tak on zrobi to za mnie !
	        	$data= $form->getValues(); 
	        	$obj->setFromArray($data);
	        	$obj->save();
        		return $this->_helper->redirector('edit','crudDamian',null,array('id'=> $id));
        	}
        	
        	$this->view->form=$form;
        }
        else 
        {
        throw new Exception('sdfsfd',404);
        }
        
    }
    
	public function showAction()
    {
    	$id = $this->getRequest()->getParam('id');
        
        $Osoba = new Application_Model_DbTable_Osoba();
        
        $obj = $Osoba->find($id)->current(); //abym mogł wywalic wiersz musze go najpierw pobrac
        if(!$obj)
        {
        	throw new Zend_Date_Exception('Błedny adres',404);
        }
    	$this->view->object=$obj;
    }
    
    
    /**
     * Przyklad paginacji
     * 2012-01-21 * TOD NARAZIE NIE DZIALA
     */
	public function show2Action()
    {
    	echo ' akcja showAction kontroler crud damian - przyklad zastosowania PAGINACJI';
    	
    	$rzeki = new Application_Model_DbTable_Rzeki();
    	$sql = $rzeki->select(); //do paginacja w zendzie musze niestety przekazac obiekt select
    	
    	// bardziej skomplikowane zapytanie narazie mi nie potrzebne
    	//$sql->from('rzeki')->where('kontynent = ? ', $id )->order($order);

# recznie twoarzenie zapytania przekazanego do paginacji - musi to byc obiekt klasy ..adapter_DbSelect    	
/**
$adapter = new Zend_Paginator_Adapter_DbSelect($db->select()->from('posts'));
$adapter->setRowCount(
    $db->select()
       ->from(
            'item_counts',
            array(
               Zend_Paginator_Adapter_DbSelect::ROW_COUNT_COLUMN => 'post_count'
            )
         )
);
*/
    	    	
    	$zapytanie_rzeki=$sql->from('rzeki');
    	
    	# Paginacja
 //mozemy do paginacji przslac tablice zamiast obiektu select ! wtedy w arg Zend_Paginator_Adapter_Array
    	$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbTableSelect($sql));
    	$paginator->setItemCountPerPage(5);//ile wynikow na strone
    	$paginator->setCurrentPageNumber($this->_getParam('page',1));
    	
    	$this->view->paginator=$paginator;
    	
    }
    	
    /**
     * Przykłądowa funkcja PAGINACJA
     * TOD NARAZIE NIE DZIALA !!
     */
    function getGamesByPlatform($id, $page=1, $order="nazwa")
    {
    	$bootstrap = $this->getInvokeArg('bootstrap'); 
        $options = $bootstrap->getOptions();
        # informacja ta jest zapisana w tym przypadku w konfiguracji aplikacji ale moze byc jako para albo na sztywne w metodzie
        $ile_na_strone_domyslnie = $options['pagination']['item']['count']['per']['page'];
        
    	$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbTableSelect($sql));
    	$paginator->setItemCountPerPage(10);
    	$paginator->setCurrentPageNumber($page); // $this->_getParam('page',1) // aktualna strona tworzona dynamicznie 
    	return $paginator;
    }
        
    	
 }
    



